<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <h2>这是子组件传递过来的值：{{msg}}==={{name}}</h2>
      <h1>{{msg}}</h1>
      <!-- 第二步  父组件接受子组件传递过来的方法 -->
      <com1 :data='pData' @hander-send='myChange'></com1>
    </div>
    <template id="com1">

      <div>
        {{msg}}---{{data}}

        <!-- 子向父组件传递值    本质是传递一个方法 -->
        <button @click='changeData'>点击发送数据到父组件</button>
      </div>
    </template>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        let com1 ={
            props:['data'],
            data(){
              return{
                msg:'我是组件1'
              }
            },
            template:'#com1',
            methods: {
              changeData(){
                   //第一步发送  方法
                //   固定写法 采用 $emit('第一个参数自定义方法名采用 - 写法','第二个参数子组件自己的数据')
                // this.$emit('hander-send',this.msg)

                let obj={
                  name:'zs',
                  age:19,
                  msg:this.msg 
                }

                //发送一个对象   如果传递的值大于2个 写成对象
                this.$emit('hander-send',obj)
              }
            },
        }
      var vm = new Vue({
        el: "#app",
        data: {
          msg: "vue",
          pData:'我是父组件的值',
          a:'',
          name:'',
        },
        methods: {
          myChange(data){
            console.log(data);

            this.name = data.name
            this.msg = data.msg 
          }
        },
        components:{
          com1
        },
      });
    </script>
  </body>
</html>
